package com.gopay.solution.manager;

import com.gopay.solution.domain.vo.Solution;

import java.util.List;

/**
 * 方案管理器接口
 * 
 * @SolutionManager.java
 * @author MA HUAN
 * @2013-3-26 上午11:39:12 www.gopay.com.cn Inc.All rights reserved.
 */
public interface SolutionManager {

    public Solution upgrade(long seq);
    
    public Solution clone(long seq);

    /**
     * 修改方案，包括修改方案名称，方案描述，方案明细 注意：本更新方法更新明细的过程为：1. 清理原方案所有关联明细信息，2.
     * 保存传入的新明细信息。假如要修改的方案和交易码相关，则应使用modifyBySeqAndIntTxnCd方法
     * 
     * @param solution
     * @return
     */
    public boolean modify(Solution solution);


    /**
     * 保存方案
     * 
     * @param solution
     * @return
     */
    public boolean save(Solution solution);

    /**
     * 删除方案
     * 
     * @param seq
     * @return
     */
    public boolean delete(long seq);

    /**
     * 加载方案
     * 
     * @param seq
     * @return
     */
    public Solution load(long seq);

    /**
     * 部分方案明细涉及到交易码，此方法提供安交易码加载方案明细（即不加载全部明细信息，只加载相关交易的明细信息）
     * 
     * @param seq
     * @param intTxnCd
     * @return
     */
    public Solution loadBySeqAndIntTxnCd(long seq, String intTxnCd);

    /**
     * 部分方案明细涉及到交易码，此方法提供安交易码修改方案明细（即不影响全部明细信息，只影响相关交易的明细信息）
     * 
     * @param solution
     * @param intTxnCd
     * @returnloadBySeqAndIntTxnCd
     */
    public boolean modifyBySeqAndIntTxnCd(Solution solution, String intTxnCd);

    /**
     * 修改方案同时清除缓存
     * @param solution
     * @param intTxnCd
     * @param solutionType
     * @param prodCode
     * @return
     */
    public boolean modifyBySeqAndIntTxnCd(Solution solution, String intTxnCd,String solutionType,String prodCode);

    /**
     * 加载所有方案
     * 
     * @return
     */
    public List<Solution> loadAll();

    /**
     * 生成新的方案ID
     * 
     * @return
     */
    public long nextSolutionId();
    
    public long nextSolutionDtlId();    
    
    public boolean delBySoluIdAndIntTxnCd(Long solutionId,String intTxnCd);

    /**
     * 删除方案同时清除缓存
     * @param solutionId
     * @param intTxnCd
     * @param solutionType
     * @param prodCode
     * @return
     */
    public boolean delBySoluIdAndIntTxnCd(Long solutionId,String intTxnCd,String solutionType,String prodCode);

}
